import requests
from database import insert_quote, fetch_quotes_table
from config import QUOTE_API_URL
import logging
import random
from datetime import datetime  # 导入 datetime 模块

# 设置日志
logger = logging.getLogger(__name__)

# 一言API请求地址
QUOTE_API_URL = "https://v1.hitokoto.cn"  # 或者 "https://international.v1.hitokoto.cn"（针对海外）

# 句子类型选择
QUOTE_TYPES = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']

def fetch_quotes():
    """
    从一言API获取随机句子，并插入到数据库中。
    """
    try:
        # 随机选择一个句子类型
        selected_type = random.choice(QUOTE_TYPES)

        # 设置请求参数
        params = {
            'c': selected_type,  # 句子类型
            'encode': 'json',  # 返回json格式
            'charset': 'utf-8',  # 返回utf-8编码
            'min_length': 0,  # 最小句子长度
            'max_length': 30,  # 最大句子长度
        }

        # 发送请求
        response = requests.get(QUOTE_API_URL, params=params)
        response.raise_for_status()

        # 解析返回的JSON
        quote_data = response.json()

        # 从返回数据中提取需要的信息
        quote_text = quote_data.get("hitokoto")
        quote_from = quote_data.get("from")
        quote_from_who = quote_data.get("from_who")
        quote_uuid = quote_data.get("uuid")
        created_at = quote_data.get("created_at")

        # 如果返回的内容有缺失，则跳过此条
        if not quote_text:
            logger.warning("Received empty quote.")
            return

        # 将 UNIX 时间戳转换为 datetime 对象
        if created_at:
            created_at = datetime.utcfromtimestamp(int(created_at))

        # 准备插入的数据
        quote = {
            'content': quote_text,
            'author': quote_from_who if quote_from_who else "Unknown",
            'source': quote_from if quote_from else "Unknown",
            'uuid': quote_uuid,
            'created_at': created_at,  # 使用转换后的 datetime 对象
        }

        # 获取数据库表
        quotes_table = fetch_quotes_table()

        # 插入数据到数据库
        insert_quote(quotes_table, quote)
        logger.info("Quote fetched and inserted successfully.")

    except requests.exceptions.RequestException as e:
        logger.error(f"Failed to fetch quote: {e}")
    except Exception as e:
        logger.error(f"Error inserting data into quotes: {e}")


# 调用函数
if __name__ == "__main__":
    fetch_quotes()
